package porotos;

import java.io.Serializable;
import java.util.List;
import java.util.logging.Logger;

import javax.annotation.ManagedBean;
import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import javax.inject.Named;

import entidades.Registro;

@ManagedBean
@SessionScoped
@Named
public class AbmRegistros implements Serializable {
	private static final long serialVersionUID = -5607663570191794472L;
	
	@Inject
	private transient Logger logger;
	@Inject
	private AdminRegistros adminRegistros;
	private final ProyectoDeRegistro nuevoRegistro = new ProyectoDeRegistro();
	
	AbmRegistros(){} // necesario para que este managed bean sea proxyable
	
//	@Inject
//	AbmRegistros(Instance<AdminRegistros> adminRegistros, Instance<Logger> logger) {
//		this.adminRegistros = adminRegistros.get();
//		this.logger = logger.get();
//	}
	
	public List<Registro> getRegistros() {
		logger.info("tomando lista de registros...");
		return this.adminRegistros.getRegistros();
	}
	
	public void editar(Registro registro) {
		// TODO cambiar a la página de edicion de registro
		logger.info("registro="+registro);
	}
	
	public ProyectoDeRegistro getNuevoRegistro() {
		return this.nuevoRegistro;
	}

	
	public void agregarNuevoRegistro() {
		logger.info("nuevoRegistro="+this.nuevoRegistro);
		System.out.println("nuevoRegistro="+this.nuevoRegistro);
		
		this.adminRegistros.agregarRegistro(this.nuevoRegistro.convertirARegistro());
		this.nuevoRegistro.limpiar();
	}
	
	@ManagedBean
	public static class ProyectoDeRegistro {
		@Inject
		private transient Logger logger;
		
		private String dni;
		private String nombre;
		
		ProyectoDeRegistro() {
			this.dni="ingrese DNI";
			this.nombre="ingrese nombre";
		}
		
		@PostConstruct
		void postConstruct() {
			logger.info("ProyectoDeRegistro construido.");
		}
		
		void limpiar() {
			this.dni=null;
			this.nombre=null;
		}
		
		Registro convertirARegistro() {
			return new Registro(Integer.parseInt(this.dni), this.nombre);
		}

		public String getDni() {
			return dni;
		}

		public void setDni(String dni) {
			this.dni = dni;
		}

		public String getNombre() {
			return nombre;
		}

		public void setNombre(String nombre) {
			this.nombre = nombre;
		}
		
		
	}
}
